﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVC.OA.Model;

namespace MVC.OA.UI.Controllers
{
    public class BaseController : Controller
    {
        /// <summary>
        /// 检查当前控制器是否需要用户登录，默认true，flase则不需要登录
        /// </summary>
        public bool IsCheckUserLogin = true;

        public UserInfo LoginUserInfo { get; set; }

        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //mvc请求来了之后，根据请求地址，创建控制器工厂(Spring.Net)，控制器工厂创建控制器，执行方法。
            //Spring.Net
            base.OnActionExecuting(filterContext);
            if(IsCheckUserLogin)
            {
                //if(filterContext.HttpContext.Session["LoginUserInfo"]==null)
                //{
                //    filterContext.HttpContext.Response.Redirect("/UserLogin/Index");
                //}
                //else
                //{
                //    LoginUserInfo = filterContext.HttpContext.Session["loginUser"] as UserInfo;
                //}

                //使用mm+cookie代替session
                //校验用户是否已经登录

                //从缓存中拿到当前的登录的用户信息。              

                if (Request.Cookies["userLoginID"] == null)
                {
                    filterContext.HttpContext.Response.Redirect("/UserLogin/Index");
                    return;
                }
                try
                {  
                    string userLoginID = Request.Cookies["userLoginID"].Value;
                    UserInfo userInfo = Common.Cache.CacheHelper.GetCache(userLoginID) as UserInfo;
               
                if (userInfo==null)
                {
                    filterContext.HttpContext.Response.Redirect("/UserLogin/Index");
                    return;                    
                }
                LoginUserInfo = userInfo;

                //滑动窗口机制。在增加20分分钟过期
                Common.Cache.CacheHelper.SetCache(userLoginID, userInfo, DateTime.Now.AddMinutes(20));
                }
                catch (Exception ex)
                {

                     Response.Write(ex.ToString());
                }
            }
        }
    }
}
